home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / linux / loop.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  4.0 KB  |  165 lines

  1. #ifndef _LINUX_LOOP_H
  2. #define _LINUX_LOOP_H
  3.  
  4. /*
  5.  * include/linux/loop.h
  6.  *
  7.  * Written by Theodore Ts'o, 3/29/93.
  8.  *
  9.  * Copyright 1993 by Theodore Ts'o.  Redistribution of this file is
  10.  * permitted under the GNU General Public License.
  11.  */
  12.  
  13. #define LO_NAME_SIZE    64
  14. #define LO_KEY_SIZE    32
  15.  
  16. #ifdef __KERNEL__
  17. #include <linux/bio.h>
  18. #include <linux/blkdev.h>
  19. #include <linux/spinlock.h>
  20. #include <linux/mutex.h>
  21.  
  22. /* Possible states of device */
  23. enum {
  24.     Lo_unbound,
  25.     Lo_bound,
  26.     Lo_rundown,
  27. };
  28.  
  29. struct loop_func_table;
  30.  
  31. struct loop_device {
  32.     int        lo_number;
  33.     int        lo_refcnt;
  34.     loff_t        lo_offset;
  35.     loff_t        lo_sizelimit;
  36.     int        lo_flags;
  37.     int        (*transfer)(struct loop_device *, int cmd,
  38.                     struct page *raw_page, unsigned raw_off,
  39.                     struct page *loop_page, unsigned loop_off,
  40.                     int size, sector_t real_block);
  41.     char        lo_file_name[LO_NAME_SIZE];
  42.     char        lo_crypt_name[LO_NAME_SIZE];
  43.     char        lo_encrypt_key[LO_KEY_SIZE];
  44.     int        lo_encrypt_key_size;
  45.     struct loop_func_table *lo_encryption;
  46.     __u32           lo_init[2];
  47.     uid_t        lo_key_owner;    /* Who set the key */
  48.     int        (*ioctl)(struct loop_device *, int cmd, 
  49.                  unsigned long arg); 
  50.  
  51.     struct file *    lo_backing_file;
  52.     struct block_device *lo_device;
  53.     unsigned    lo_blocksize;
  54.     void        *key_data; 
  55.  
  56.     gfp_t        old_gfp_mask;
  57.  
  58.     spinlock_t        lo_lock;
  59.     struct bio         *lo_bio;
  60.     struct bio        *lo_biotail;
  61.     int            lo_state;
  62.     struct mutex        lo_ctl_mutex;
  63.     struct task_struct    *lo_thread;
  64.     wait_queue_head_t    lo_event;
  65.  
  66.     struct request_queue    *lo_queue;
  67.     struct gendisk        *lo_disk;
  68.     struct list_head    lo_list;
  69. };
  70.  
  71. #endif /* __KERNEL__ */
  72.  
  73. /*
  74.  * Loop flags
  75.  */
  76. enum {
  77.     LO_FLAGS_READ_ONLY    = 1,
  78.     LO_FLAGS_USE_AOPS    = 2,
  79.     LO_FLAGS_AUTOCLEAR    = 4,
  80. };
  81.  
  82. #include <asm/posix_types.h>    /* for __kernel_old_dev_t */
  83. #include <asm/types.h>        /* for __u64 */
  84.  
  85. /* Backwards compatibility version */
  86. struct loop_info {
  87.     int           lo_number;        /* ioctl r/o */
  88.     __kernel_old_dev_t lo_device;         /* ioctl r/o */
  89.     unsigned long       lo_inode;         /* ioctl r/o */
  90.     __kernel_old_dev_t lo_rdevice;         /* ioctl r/o */
  91.     int           lo_offset;
  92.     int           lo_encrypt_type;
  93.     int           lo_encrypt_key_size;     /* ioctl w/o */
  94.     int           lo_flags;            /* ioctl r/o */
  95.     char           lo_name[LO_NAME_SIZE];
  96.     unsigned char       lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */
  97.     unsigned long       lo_init[2];
  98.     char           reserved[4];
  99. };
  100.  
  101. struct loop_info64 {
  102.     __u64           lo_device;            /* ioctl r/o */
  103.     __u64           lo_inode;            /* ioctl r/o */
  104.     __u64           lo_rdevice;            /* ioctl r/o */
  105.     __u64           lo_offset;
  106.     __u64           lo_sizelimit;/* bytes, 0 == max available */
  107.     __u32           lo_number;            /* ioctl r/o */
  108.     __u32           lo_encrypt_type;
  109.     __u32           lo_encrypt_key_size;        /* ioctl w/o */
  110.     __u32           lo_flags;            /* ioctl r/o */
  111.     __u8           lo_file_name[LO_NAME_SIZE];
  112.     __u8           lo_crypt_name[LO_NAME_SIZE];
  113.     __u8           lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */
  114.     __u64           lo_init[2];
  115. };
  116.  
  117. /*
  118.  * Loop filter types
  119.  */
  120.  
  121. #define LO_CRYPT_NONE        0
  122. #define LO_CRYPT_XOR        1
  123. #define LO_CRYPT_DES        2
  124. #define LO_CRYPT_FISH2        3    /* Twofish encryption */
  125. #define LO_CRYPT_BLOW        4
  126. #define LO_CRYPT_CAST128    5
  127. #define LO_CRYPT_IDEA        6
  128. #define LO_CRYPT_DUMMY        9
  129. #define LO_CRYPT_SKIPJACK    10
  130. #define LO_CRYPT_CRYPTOAPI    18
  131. #define MAX_LO_CRYPT        20
  132.  
  133. #ifdef __KERNEL__
  134. /* Support for loadable transfer modules */
  135. struct loop_func_table {
  136.     int number;    /* filter type */ 
  137.     int (*transfer)(struct loop_device *lo, int cmd,
  138.             struct page *raw_page, unsigned raw_off,
  139.             struct page *loop_page, unsigned loop_off,
  140.             int size, sector_t real_block);
  141.     int (*init)(struct loop_device *, const struct loop_info64 *); 
  142.     /* release is called from loop_unregister_transfer or clr_fd */
  143.     int (*release)(struct loop_device *); 
  144.     int (*ioctl)(struct loop_device *, int cmd, unsigned long arg);
  145.     struct module *owner;
  146. }; 
  147.  
  148. int loop_register_transfer(struct loop_func_table *funcs);
  149. int loop_unregister_transfer(int number); 
  150.  
  151. #endif
  152. /*
  153.  * IOCTL commands --- we will commandeer 0x4C ('L')
  154.  */
  155.  
  156. #define LOOP_SET_FD        0x4C00
  157. #define LOOP_CLR_FD        0x4C01
  158. #define LOOP_SET_STATUS        0x4C02
  159. #define LOOP_GET_STATUS        0x4C03
  160. #define LOOP_SET_STATUS64    0x4C04
  161. #define LOOP_GET_STATUS64    0x4C05
  162. #define LOOP_CHANGE_FD        0x4C06
  163.  
  164. #endif
  165.